#ifndef USART_H
#define USART_H

#include <fcntl.h>
#include <stdio.h>
#include <string>
#include <termios.h>

#define USER_BAUD_RATE B9600     //predkosc transmisji w bit/s
#define PORT_ID "/dev/ttyUSB0"   //polozenie urzadzenia w systemie

/** Klasa odpowiadająca za komunikację komputera z robotem
 * za pomocą interfejsu UART.
 * Zawiera kompletny zestaw metod do obsługi standartu RS232
 */
class Usart
{
        /** Pole przechowujące stan urządzenia USB */
        int fd;
        int Usart_fd;
        /** Metoda ustawiająca parametry połączenia
         * @throw w razie niepowodzenia wyrzuca obiekt std::string z treścią komunikatu
         * @return TO DO
         */
        void SetCom() throw(std::string);
public:
        /** Konstruktor włącza i ustawia parametry urządzenia USB
         * komunikującego się z platformą
         * @throw w razie niepowodzenia wyrzuca wyjątek std::string zawierający komunikat o błędzie
         */
        Usart() throw(std::string);
        /** Destruktor zamykający urządzenie USB */
        ~Usart();

        /** Metoda pozwalająca odczytać ciąg nadawany z platformy
         * @return wartość zwracana to ciąg znaków opakowany klasą std::string
         */
        std::string Read() throw(std::string);

        /** Metoda pozwalajaca odczytać 1 bajt danych w postaci znaku typu unsigned char
        *   @return obiekt typu unsigned char przechowujący odebrany znak
        */


        unsigned char ReadByte() throw(std::string);

        /** Metoda zapisująca ciąg do platformy.
                 * @param str obiekt przechowujący napis.
                 */

        void Write(std::string str) throw(std::string);
        /** Metoda przesylajaca bajt danych w postaci znaku typu unsigned char
         * @param unsigned char znak do przeslania.
         */
        void WriteByte(unsigned char b) throw(std::string);


};

#endif // UART_H
